package cliente.reserva;

import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.text.ParseException;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class ProcurarReserva extends AbstractAction {
	private Action executaProcurarReserva; 
	private JFrame tfProcurarReserva;
	private JLabel lNomeCliente, lNumAp, lDataIni, lDataFim, lValorEntrada;
	private JTextField tNomeCliente, tValorEntrada, tNumAp;
	JFormattedTextField tDataIni, tDataFim;
	private JButton bProcurar, bApagar, bAlterar, bFechar, confirmar;
	
	/**
	 * Construtor Padrão
	 */
	public ProcurarReserva() {
		super("Procurar Reserva");
		this.putValue(Action.SHORT_DESCRIPTION, "Procura uma reserva no sistema");
		this.setExecutaProcurarReserva(new ExecutaProcurarReserva(this));
	}

	@Override
	/**
	 *  Define o que será executado quando a ação for acionada
	 *  @param event evento recebido
	 */
	public void actionPerformed(ActionEvent event) {
		// Cria um novo frame
		setTfProcurarReserva(new JFrame("Procurar Reserva"));
		// Seta a operação default ao fechar o frame (no caso, é eliminar o frame da memória)
		getTfProcurarReserva().setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		// Seta o container interno
		Container interno = this.getTfProcurarReserva().getContentPane();
		// Ajusta o layout do Frame para um GridBagLayout
		GridBagConstraints cons = new GridBagConstraints();
		GridBagLayout layout = new GridBagLayout();
		interno.setLayout(layout);
		// Seta uma borda de 2px entre cada elemento do frame
		cons.insets = new Insets(2,2,2,2);
		
		// Componentes do Frame
		
		// Label do Nome do Cliente
		setlNomeCliente(new JLabel("CPF Cliente"));		// Novo label
		cons.weightx 	= 0.25; 					// Ocupara 25% da linha
		cons.fill 		= GridBagConstraints.NONE;	// Não será redimensionado
		cons.gridx 		= 0;						// Ficará na coluna 0
		cons.gridy 		= 0;						// Ficará na linha 0
		interno.add(getlNomeCliente(), cons);		// Adiciona ao Frame
		
		// Texto do Nome do Cliente
		settNomeCliente(new JTextField());
		cons.weightx 	= 0.75;
		cons.fill 		= GridBagConstraints.HORIZONTAL;	// Será esticado horizontalmente
		cons.gridx 		= 1;
		cons.gridy 		= 0;
		interno.add(gettNomeCliente(), cons);
		
		// Label da data de início
		setlDataIni(new JLabel("Data de início"));	
		cons.weightx 	= 0.25; 						
		cons.fill 		= GridBagConstraints.NONE;		
		cons.gridx 		= 0;								
		cons.gridy 		= 1;								
		interno.add(getlDataIni(),cons);			
		
		// Texto da data de início
		settDataIni(new JFormattedTextField());
		cons.weightx 	= 0.25;
		cons.fill 		= GridBagConstraints.HORIZONTAL;	// Será expandido horizontalmente
		cons.gridx 		= 1;
		cons.gridy 		= 1;	
		interno.add(gettDataIni(), cons);
		// Ajusta o formato da data
		try  {  
				formater.MaskFormater.maskData(gettDataIni());  
		} catch (ParseException ex) {  
				JOptionPane.showMessageDialog(getTfProcurarReserva(),"Data inválida.","Erro",JOptionPane.ERROR_MESSAGE);  
		} 
		
		// Label da data do fim
		setlDataFim(new JLabel("Data de Saída"));
		cons.weightx 	= 0.25; 
		cons.gridx 		= 0;
		cons.gridy 		= 2;
		cons.fill 		= GridBagConstraints.NONE;
		interno.add(getlDataFim(), cons);
		
		// Texto da data de fim
		settDataFim(new JFormattedTextField());
		cons.weightx 	= 0.75;
		cons.gridx 		= 1;
		cons.gridy 		= 2;
		cons.fill 		= GridBagConstraints.HORIZONTAL;
		interno.add(gettDataFim(), cons);
		
		// Label do numero do apartamento
		setlNumAp(new JLabel("Apartamento"));
		cons.weightx	= 0.75;
		cons.gridx		= 0;
		cons.gridy		= 3;
		cons.fill		= GridBagConstraints.NONE;
		interno.add(getlNumAp(), cons);
		
		// Texto do numero do apartamento
		settNumAp(new JTextField());
		cons.weightx	= 0.25;
		cons.gridx		= 1;
		cons.gridy		= 3;
		cons.fill		= GridBagConstraints.HORIZONTAL;
		interno.add(gettNumAp(), cons);
		
		// Label do Valor da Entrada
		setlValorEntrada(new JLabel("Valor da entrada"));
		cons.weightx 	= 0.25;
		cons.gridx 		= 0;
		cons.gridy		= 4;
		cons.fill		= GridBagConstraints.NONE;
		interno.add(getlValorEntrada(), cons);
		
		// Texto do Valor da Entrada
		settValorEntrada(new JTextField());
		cons.weightx	= 0.75;
		cons.gridx		= 1;
		cons.gridy		= 4;
		cons.fill		= GridBagConstraints.HORIZONTAL;
		interno.add(gettValorEntrada(), cons);
		
		// Botão Procurar
		setbProcurar(new JButton("Procurar"));
		cons.weightx	= 0.5;
		cons.gridx		= 0;
		cons.gridy		= 5;
		cons.fill		= GridBagConstraints.HORIZONTAL;
		interno.add(getbProcurar(), cons);
		getbProcurar().setActionCommand("procurar");
		getbProcurar().addActionListener(getExecutaProcurarReserva());
		
		// Botão Alterar
		setbAlterar(new JButton("Alterar"));
		cons.weightx	= 0.5;
		cons.gridx		= 1;
		cons.gridy		= 5;
		cons.fill		= GridBagConstraints.HORIZONTAL;
		interno.add(getbAlterar(), cons);
		getbAlterar().setActionCommand("alterar");
		getbAlterar().addActionListener(getExecutaProcurarReserva());
		
		// Botão Apagar
		setbApagar(new JButton("Apagar"));
		cons.weightx	= 0.5;
		cons.gridx		= 0;
		cons.gridy		= 6;
		cons.fill		= GridBagConstraints.HORIZONTAL;
		interno.add(getbApagar(), cons);
		getbApagar().setActionCommand("apagar");
		getbApagar().addActionListener(getExecutaProcurarReserva());
		
		// Botão Fechar
		setbFechar(new JButton("Fechar"));
		cons.weightx	= 0.5;
		cons.weighty	= 2;
		cons.gridx		= 1;
		cons.gridy		= 6;
		cons.fill		= GridBagConstraints.HORIZONTAL;
		interno.add(getbFechar(), cons);
		getbFechar().setActionCommand("fechar");
		getbFechar().addActionListener(getExecutaProcurarReserva());
		
		// Botão Confirmar
		setConfirmar(new JButton("Confirmar (checkin)"));
		cons.gridx		= 0;
		cons.gridy		= 7;
		cons.fill		= GridBagConstraints.HORIZONTAL;
		interno.add(getConfirmar(), cons);
		getConfirmar().setActionCommand("confirmar");
		getConfirmar().addActionListener(getExecutaProcurarReserva());
		
		tfProcurarReserva.setSize(300, 230);
		tfProcurarReserva.setVisible(true);
		
	}

	public void setExecutaProcurarReserva(Action executaProcurarReserva) {
		this.executaProcurarReserva = executaProcurarReserva;
	}

	public Action getExecutaProcurarReserva() {
		return executaProcurarReserva;
	}

	public JFrame getTfProcurarReserva() {
		return tfProcurarReserva;
	}

	public void setTfProcurarReserva(JFrame tfProcurarReserva) {
		this.tfProcurarReserva = tfProcurarReserva;
	}

	public JLabel getlDataIni() {
		return lDataIni;
	}

	public void setlDataIni(JLabel lDataIni) {
		this.lDataIni = lDataIni;
	}

	public JLabel getlDataFim() {
		return lDataFim;
	}

	public void setlDataFim(JLabel lDataFim) {
		this.lDataFim = lDataFim;
	}

	public JLabel getlValorEntrada() {
		return lValorEntrada;
	}

	public void setlValorEntrada(JLabel lValorEntrada) {
		this.lValorEntrada = lValorEntrada;
	}

	public JFormattedTextField gettDataIni() {
		return tDataIni;
	}

	public void settDataIni(JFormattedTextField tDataIni) {
		this.tDataIni = tDataIni;
	}

	public JTextField gettDataFim() {
		return tDataFim;
	}

	public void settDataFim(JFormattedTextField tDataFim) {
		this.tDataFim = tDataFim;
	}

	public JTextField gettValorEntrada() {
		return tValorEntrada;
	}

	public void settValorEntrada(JTextField tValorEntrada) {
		this.tValorEntrada = tValorEntrada;
	}

	public JButton getbProcurar() {
		return bProcurar;
	}

	public void setbProcurar(JButton bProcurar) {
		this.bProcurar = bProcurar;
	}

	public JButton getbApagar() {
		return bApagar;
	}

	public void setbApagar(JButton bApagar) {
		this.bApagar = bApagar;
	}

	public JButton getbFechar() {
		return bFechar;
	}

	public void setbFechar(JButton bFechar) {
		this.bFechar = bFechar;
	}

	public void setlNomeCliente(JLabel lNomeCliente) {
		this.lNomeCliente = lNomeCliente;
	}

	public JLabel getlNomeCliente() {
		return lNomeCliente;
	}

	public void settNomeCliente(JTextField tNomeCliente) {
		this.tNomeCliente = tNomeCliente;
	}

	public JTextField gettNomeCliente() {
		return tNomeCliente;
	}

	public void setbAlterar(JButton bAlterar) {
		this.bAlterar = bAlterar;
	}

	public JButton getbAlterar() {
		return bAlterar;
	}

	public void setConfirmar(JButton confirmar) {
		this.confirmar = confirmar;
	}

	public JButton getConfirmar() {
		return confirmar;
	}

	public void setlNumAp(JLabel lNumAp) {
		this.lNumAp = lNumAp;
	}

	public JLabel getlNumAp() {
		return lNumAp;
	}

	public void settNumAp(JTextField tNumAp) {
		this.tNumAp = tNumAp;
	}

	public JTextField gettNumAp() {
		return tNumAp;
	}

}
